home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / benchmarks / mon / mon.c < prev   
C/C++ Source or Header  |  1989-09-01  |  2KB  |  87 lines

  1. /*
  2.  * mon.c --
  3.  *    Benchmark to time monitor locks and condition variables.
  4.  */
  5. #include "sprite.h"
  6. #include "option.h"
  7. #include "syncMonitor.h"
  8. #include "time.h"
  9. #include "proc.h"
  10. #include "stdio.h"
  11. #include "sysStats.h"
  12. #include "kernel/sched.h"
  13.  
  14. static Sync_Lock    lock;
  15. #define    LOCKPTR (&lock)
  16. static Sync_Condition    condition;
  17.  
  18. int    numIterations = 1000;
  19. Boolean    parHigh = FALSE;
  20. Boolean    childHigh = FALSE;
  21.  
  22. Sched_Instrument startSchedStats, endSchedStats;
  23.  
  24. Option optionArray[] = {
  25.     {OPT_INT, "n", (Address)&numIterations, 
  26.      "Number of iterations (Default 1000)."},
  27.     {OPT_TRUE, "p", (Address)&parHigh,
  28.     "Make parent high priority."},
  29.     {OPT_TRUE, "c", (Address)&childHigh,
  30.      "Make child high priority."},
  31.  
  32. };
  33. int    numOptions = Opt_Number(optionArray);
  34. int    i = 0;
  35.  
  36. main(argc, argv)
  37.     int     argc;
  38.     char *argv[];
  39. {
  40.     register    int    numTimes;
  41.     int            pid;
  42.     Time        before, after;
  43.  
  44.     argc = Opt_Parse(argc, argv, optionArray, numOptions, 0);
  45.     numTimes = numIterations;
  46.     if (Proc_Fork(TRUE, &pid) == PROC_CHILD_PROC) {
  47.     LOCK_MONITOR;
  48.  
  49.     if (childHigh) {
  50.         Proc_SetPriority(PROC_MY_PID, PROC_NO_INTR_PRIORITY, FALSE);
  51.     }
  52.     while (numTimes > 0) {
  53.         while (i == 0) {
  54.         Sync_Wait(&condition, FALSE);
  55.         }
  56.         i = 0;
  57.         Sync_Broadcast(&condition);
  58.         numTimes--;
  59.     }
  60.     UNLOCK_MONITOR;
  61.     } else {
  62.     LOCK_MONITOR;
  63.  
  64.     if (parHigh) {
  65.         Proc_SetPriority(PROC_MY_PID, PROC_NO_INTR_PRIORITY, FALSE);
  66.     }
  67.     Sys_Stats(SYS_SCHED_STATS, 0, &startSchedStats);
  68.     Sys_GetTimeOfDay(&before, NULL, NULL);
  69.     while (numTimes > 0) {
  70.         while (i == 1) {
  71.         Sync_Wait(&condition, FALSE);
  72.         }
  73.         i = 1;
  74.         Sync_Broadcast(&condition);
  75.         numTimes--;
  76.     }
  77.     Sys_GetTimeOfDay(&after, NULL, NULL);
  78.     Sys_Stats(SYS_SCHED_STATS, 0, &endSchedStats);
  79.  
  80.     UNLOCK_MONITOR;
  81.     Time_Subtract(after, before, &after);
  82.     printf("%d wait-broadcasts at %dus each\n", numIterations,
  83.         (after.seconds * 1000000 + after.microseconds) / numIterations);
  84.     PrintIdleTime(stderr, &startSchedStats, &endSchedStats, &after);
  85.     }
  86. }
  87.